package easylog

import "log/slog"

type Logger interface {

	// SetLogLevel 设置日志级别 [slog.Level]
	SetLogLevel(level slog.Level)

	// Debug logs at [slog.LevelDebug]
	Debug(format string, args ...any)

	// Info logs at [slog.LevelInfo]
	Info(format string, args ...any)

	// Warn logs at [slog.LevelWarn]
	Warn(format string, args ...any)

	// Error logs at [slog.LevelError]
	Error(format string, args ...any)

	// Println 直接打印
	Println(format string, v ...any)

	// Close 关闭日志
	Close()
}

//import (
//	"bytes"
//	"fmt"
//	"log"
//	"runtime"
//	"sync"
//	"time"
//)
//
//var (
//	once = new(sync.Once)
//)
//
//type Logger struct {
//	std   *log.Logger
//	title string
//	close bool
//	level LogLevel
//}
//
//func NewLogger(title string) *Logger {
//	std := log.New(logFile, "", log.Lshortfile)
//	return &Logger{
//		std:   std,
//		title: title,
//		close: false,
//		level: DEBUG,
//	}
//}
//
//func (hl *Logger) Debug(format string, v ...any) {
//	if !hl.close && hl.isPrint(DEBUG) {
//		hl.std.SetPrefix(formatPrefix(hl.title, debug, logLevelColorMap[debug]))
//		err := hl.std.Output(2, fmt.Sprintf(format, v...))
//		if err != nil {
//			return
//		}
//	}
//}
//
//func (hl *Logger) Info(format string, v ...any) {
//	if !hl.close && hl.isPrint(INFO) {
//		hl.std.SetPrefix(formatPrefix(hl.title, info, logLevelColorMap[info]))
//		err := hl.std.Output(2, fmt.Sprintf(format, v...))
//		if err != nil {
//			return
//		}
//	}
//}
//
//func (hl *Logger) Warn(format string, v ...any) {
//	if !hl.close && hl.isPrint(WARN) {
//		hl.std.SetPrefix(formatPrefix(hl.title, warn, logLevelColorMap[warn]))
//		err := hl.std.Output(2, fmt.Sprintf(format, v...))
//		if err != nil {
//			return
//		}
//	}
//}
//
//func (hl *Logger) Error(format string, v ...any) {
//	if !hl.close && hl.isPrint(ERROR) {
//		hl.std.SetPrefix(formatPrefix(hl.title, err, logLevelColorMap[err]))
//		err := hl.std.Output(2, fmt.Sprintf(format, v...))
//		if err != nil {
//			return
//		}
//	}
//}
//
//func (hl *Logger) CloseLog() {
//	if hl.close == false {
//		hl.close = true
//	}
//}
//
//func (hl *Logger) OpenLog() {
//	if hl.close == true {
//		hl.close = false
//	}
//}
//
//func (hl *Logger) SetLogLevel(level LogLevel) {
//	hl.level = level
//}
//
//func (hl *Logger) isPrint(currentLogLevel LogLevel) bool {
//	return currentLogLevel >= hl.level
//}
//
//func configLogDefault() {
//	once.Do(func() {
//		log.SetFlags(log.Lshortfile)
//		log.SetOutput(logFile)
//	})
//}
//
//func Debug(format string, v ...any) {
//	if isPrint(DEBUG) {
//		configLogDefault()
//		log.SetPrefix(formatPrefix("-", debug, logLevelColorMap[debug]))
//		err := log.Default().Output(2, fmt.Sprintf(format, v...))
//		if err != nil {
//			return
//		}
//	}
//}
//
//func Info(format string, v ...any) {
//	if isPrint(INFO) {
//		configLogDefault()
//		log.SetPrefix(formatPrefix("-", info, logLevelColorMap[info]))
//		err := log.Default().Output(2, fmt.Sprintf(format, v...))
//		if err != nil {
//			return
//		}
//	}
//}
//
//func Warn(format string, v ...any) {
//	if isPrint(WARN) {
//		configLogDefault()
//		log.SetPrefix(formatPrefix("-", warn, logLevelColorMap[warn]))
//		err := log.Default().Output(2, fmt.Sprintf(format, v...))
//		if err != nil {
//			return
//		}
//	}
//}
//
//func Error(format string, v ...any) {
//	if isPrint(ERROR) {
//		configLogDefault()
//		log.SetPrefix(formatPrefix("-", err, logLevelColorMap[err]))
//		err := log.Default().Output(2, fmt.Sprintf(format, v...))
//		if err != nil {
//			return
//		}
//	}
//}
//
//func formatPrefix(title, level, color string) string {
//	return fmt.Sprintf("[%s] - %v - %s%-5s%s --- [%s%-60s%s] ",
//		title, time.Now().doFormat("2006-01-02 04:15:05.000"),
//		color, level, reset,
//		cyanText, getMethodFullName(2), reset)
//}
//
//func isPrint(currentLogLevel LogLevel) bool {
//	return currentLogLevel >= logLevel
//}
//
//func getMethodFullName(skip int) string {
//	buf := make([]byte, 1024)
//	for {
//		n := runtime.Stack(buf, false)
//		if n < len(buf) {
//			buf = buf[:n]
//			break
//		}
//		buf = make([]byte, 2*len(buf))
//	}
//
//	// 剔除需要跳过的栈信息
//	for i := 0; i <= skip; i++ {
//		index := bytes.Index(buf, []byte("\n"))
//		end := bytes.Index(buf[index+1:], []byte("\n")) + index + 1
//		end += bytes.Index(buf[end+1:], []byte("\n")) + 1
//		buf = append(buf[:index], buf[end:]...)
//	}
//
//	// 开始截取真正需要的栈信息
//	index := bytes.Index(buf, []byte("\n"))
//	endIndex := bytes.Index(buf[index+1:], []byte("(")) + index + 1
//	for {
//		if string(buf[endIndex-1:endIndex]) == "." {
//			// 如果 "(" 前一个字符为 ".", 则继续找下一个 "("
//			endIndex += bytes.Index(buf[endIndex+1:], []byte("(")) + 1
//		} else {
//			break
//		}
//	}
//	return string(buf[index+1 : endIndex])
//}
